var fs = require('fs')

function getFileByPath(fpath){
    return new Promise(
        function(resolve,reject){
            fs.readFile(fpath,'utf-8',(err,dataStr)=>{
                // if(err) throw err
                // 如果报错，进入if分支后，if后面的代码就没有必要执行了
                // if(err) throw err
                // console.log(dataStr)
                if(err) return reject(err)
                resolve(dataStr)
            })
        }
    )
}

//先读取文件1，在读取2，最后读取3
//注意：通过 .then指定回调函数的时候，成功的回调函数，必须传，但是，失败的回调，可以省略不传
// 这是一个错误的示范，干万不要这么用；硬是把法拉利，开成了拖拉机
/* getFileByPath('./files/1.txt')
    .then(function(dataStr){
        console.log(dataStr)

        getFileByPath('./files/2.txt')
        .then(function(dataStr){
            console.log(dataStr)
    
            getFileByPath('./files/3.txt')
            .then(function(dataStr){
                console.log(dataStr)
            })
            
        })

    }) */

    //读取 文件 1
    //在上一个 .then中，返回一个新的 promise实例，可以继续用下一个 .then来处理
//如果前面的 Promise执行失败，我们不想让后续的 Promise操作被终止，可以为每个 promise 指定失败的回调

    getFileByPath('./files/1.txt')
    .then(function(dataStr){
        console.log(dataStr)

        //读取 文件 2
        return getFileByPath('./files/2.txt')
    })
    .then(function(data){
        console.log(data)
        //读取 文件 3
        return getFileByPath('./files/3.txt')

    })
    .then(function(data){
        console.log(data)
    })
    .catch(function(err){   // catch的作用：如果前面有任何的 Promise执行失败，则立即终止所有 promise的执行，并马上进入 catch 去外理Promise中抛出的异常
        console.log('这是自己的处理方式：'+err.message)
    })


//当我们有这样的需求：哪怕前面的 Promise执行失败了，但是，不要影响后续 promise的正常执
// 行，此时，我们可以单独为每个 promise，通过 .then 指定一下失败的回调
//有时候，我们有这样的需求，与上面的需求刚好相反：如果后续的 Promise执行，依赖于前面
// Promise执行的结果，如果前面的失败了，则后面的就没有继续执行下去的意义了，此时，我们想要实现一旦有报错，则立即终止所有 Promise的

/*
-g -S -D
-g：全局安装。 将会安装在C：\ Users \ Administrator \ AppData \ Roaming \ npm，并且写入系统环境变量；非全局安装：将会安装在当前定位目录;全局安装可以通过命令行任何地方调用它，本地安装将安装在定位目录的node_modules文件夹下，通过要求调用;
-S：即npm install module_name --save,写入package.json的dependencies ,dependencies 是需要发布到生产环境的，比如jq，vue全家桶，ele-ui等ui框架这些项目运行时必须使用到的插件就需要放到dependencies
-D：即npm install module_name --save-dev,写入package.json的devDependencies ,devDependencies 里面的插件只用于开发环境，不用于生产环境。比如一些babel编译功能的插件、webpack打包插件就是开发时候的需要，真正程序打包跑起来并不需要的一些插件。
为什么要保存在package.json 因为node_module包实在是太大了。用一个配置文件保存，只打包安装对应配置文件的插件，按需导入。

npm install cnpm -g --registry=https://registry.npm.taobao.org
cnpm -v 来测试是否成功安装

npm init -y
cnpm i jquery -S



*/



